In a computer system, which may include associated digital data storage devices, communication between a processor or controller, for example, and other aspects of the computer system, e.g., cache memory, input/output devices, displays, internal memory, attached memory and networked memory, may be over a variety of bus structures having differing high- and low-level protocols. Some of the communications paths are intended to provide high-speed reliable transmission of data and commands between elements of the computer system (e.g., a memory controller and a memory device.)
Often a stateless communication channel is employed. Stateless (memory-less) protocol channels have end points with no protocol-defined way to remember where they are in a “conversation” of message exchanges. In such connectionless transmissions the sender usually cannot be guaranteed that there will be no loss of, for example, data, or error insertion, duplication, or out-of-sequence delivery of the message when received at the receiving end of the channel. These channels have, however, the advantage of efficiency and high throughput. Such protocols are used, for example, for the datagram packet mode of the Internet protocol (IP), where occasional loss of a message or packet is not catastrophic.
In a stateless connection, no information on the state of the communications channel is retained by either sender or receiver. The sender device transmits a message at a proximal end of the communications channel to a receiver device at a distal end of the communications channel and the sender device does not expect an acknowledgment of successful receipt of the message by the receiver device at the distal end. The receiver device, at the distal end, receives the message without any prior connection setup. Here, the term “message” may be understood to encompass digital information of all types, computer instructions operational commands, data to be stored or retrieved, status information, or the like. Where specific data types are meant, a person of skill in the art would understand the context. Often the term “data” or “information” may be used to represent the message itself.
Much of the operation of a computing system and its accoutrements depends on knowing the state of the data and on an exceedingly low instance of lost or otherwise corrupted data. Stateful data has the characteristic that one or more attributes of the data depends on the prior actions taken with respect to the data. For example, pages of data may be in an ordered sequence and a sequence of in-process commands being executed by a processor in a first state is stored in an ordered manner along with the computed results when the processor enters a second state, such that the sequence of in-process commands, the remaining data and the computed results is preserved for later execution when the first state is resumed. This is merely a broad example and should not be considered to limit the nature of the information which may be considered to be associated with a “state” or the type of data which may be considered “stateful.”
While the state information may be passed as a parameter in the data being transmitted, the communications channel may nevertheless itself be stateless. A passed parameter may be an index, computed results, or the like. Even if the passed parameter is an “identifier” of the conversational state (e.g., an index, or a session Id) the communications protocol is still a stateless protocol, as the conversation between the sending and the receiving end of the channel is stateless. However, where such state information is passed between the sender and the receiver communications channel endpoints, the data at each of the end points of the communications channel may be stateful.
In computing systems, data transfer mechanisms over the communications channel are highly reliable and random errors are highly unusual. Data loss or error due to hardware faults, for example, can also occur. Where a data loss or error is encountered, the error is ordinarily corrected by an error correcting code (ECC) that was previously computed on the transmitted data and transmitted with the data so as to perform a check that the data being received is correct. Error correcting codes such as a cyclic redundancy code (CRC), BCH and others may be used, depending on the system design. Random errors have finite probabilities of occurring even in a well-designed system and the ECC is designed to detect and correct such errors. However, the ECC cannot detect or correct all errors, as the number of errors may exceed the correction capability of the ECC being used. So, errors may detectable and correctable, detectable and uncorrectable, or undetected, in order of decreasing probability of occurrence. Undetected errors result in the corruption of the data and such corruption is not apparent to the user, although the error may become apparent at some later time when the corrupted data is used. Errors that are detectable and correctable and repaired by the receiving end of a communications channel as a routine operation. Transmission of data by the sender may proceed uninterrupted.
Where an error is detected, but is uncorrectable, or if other parameters embedded in the data can be interpreted to indicate the loss of data, multiple transmissions of the same data, out of sequence reception of data, or the like, corrective action may need to be taken. Generally this corrective action would require the retransmission of the data, possibly the undoing of operations already taken by the receiving end of the communications channel, or the like. Such operations may present a significant disruption to a high-speed communications channel as there may be a plurality of data elements in transit, or being operated upon, or awaiting transmission.